package com.neusoft.neumooc.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.neusoft.core.common.BaseController;
import com.neusoft.core.common.conf.Params;
import com.neusoft.neumooc.service.TemplateService;
import com.neusoft.neumooc.vo.TemplateVO;

@Controller
@RequestMapping(value = "/template")
public class TemplateController extends BaseController {

    @Autowired
    private TemplateService templateService;

    /**
     * 跳转到内置模板管理页面
     */
    @RequestMapping(value = "/builtin")
    public String builtin(Model model) {
        try {
            List<TemplateVO> templates = templateService.getAllBuiltinTemplates();
            model.addAttribute("templates", templates);
        } catch (Exception e) {
            log.error("获取内置模板列表失败", e);
        }
        return "template/builtin";
    }
    
    /**
     * 跳转到自定义模板管理页面
     */
    @RequestMapping(value = "/custom")
    public String custom(Model model) {
        try {
            List<TemplateVO> templates = templateService.getAllCustomTemplates();
            model.addAttribute("templates", templates);
        } catch (Exception e) {
            log.error("获取自定义模板列表失败", e);
        }
        return "template/custom";
    }
    
    /**
     * 跳转到编辑页面
     */
    @RequestMapping(value = "/edit")
    public String edit(String tplFile, Model model) {
        try {
            TemplateVO template = templateService.getTemplateByFile(tplFile);
            model.addAttribute("template", template);
        } catch (Exception e) {
            log.error("获取模板失败", e);
        }
        return "template/edit";
    }
    
    /**
     * 跳转到添加页面
     */
    @RequestMapping(value = "/add")
    public String add() {
        return "template/add";
    }
    
    /**
     * 更新模板
     */
    @ResponseBody
    @RequestMapping(value = "/update")
    public Map<String, Object> update(TemplateVO template) {
        Map<String, Object> retMap = new HashMap<String, Object>();
        try {
            boolean result = templateService.updateTemplate(template);
            if(result) {
                retMap.put(Params.RET_CODE, Params.RET_CODE_SUCCESS);
                retMap.put(Params.RET_OBJ, "保存成功");
            } else {
                retMap.put(Params.RET_CODE, Params.RET_CODE_ERROR);
                retMap.put(Params.RET_OBJ, "保存失败");
            }
        } catch (Exception e) {
            log.error("更新模板失败", e);
            retMap.put(Params.RET_CODE, Params.RET_CODE_ERROR);
            retMap.put(Params.RET_OBJ, "更新模板失败");
        }
        return retMap;
    }
    
    /**
     * 删除模板
     */
    @ResponseBody
    @RequestMapping(value = "/delete")
    public Map<String, Object> delete(String tplFile) {
        Map<String, Object> retMap = new HashMap<String, Object>();
        try {
            boolean result = templateService.deleteTemplate(tplFile);
            if(result) {
                retMap.put(Params.RET_CODE, Params.RET_CODE_SUCCESS);
                retMap.put(Params.RET_OBJ, "删除成功");
            } else {
                retMap.put(Params.RET_CODE, Params.RET_CODE_ERROR);
                retMap.put(Params.RET_OBJ, "删除失败");
            }
        } catch (Exception e) {
            log.error("删除模板失败", e);
            retMap.put(Params.RET_CODE, Params.RET_CODE_ERROR);
            retMap.put(Params.RET_OBJ, "删除模板失败");
        }
        return retMap;
    }
    
    /**
     * 添加模板
     */
    @ResponseBody
    @RequestMapping(value = "/create")
    public Map<String, Object> create(TemplateVO template) {
        Map<String, Object> retMap = new HashMap<String, Object>();
        try {
            template.setCustom("1"); // 设置为自定义模板
            boolean result = templateService.addTemplate(template);
            if(result) {
                retMap.put(Params.RET_CODE, Params.RET_CODE_SUCCESS);
                retMap.put(Params.RET_OBJ, "添加成功");
            } else {
                retMap.put(Params.RET_CODE, Params.RET_CODE_ERROR);
                retMap.put(Params.RET_OBJ, "添加失败");
            }
        } catch (Exception e) {
            log.error("添加模板失败", e);
            retMap.put(Params.RET_CODE, Params.RET_CODE_ERROR);
            retMap.put(Params.RET_OBJ, "添加模板失败");
        }
        return retMap;
    }
} 